約 2,448,744 件
https://w.atwiki.jp/bbnejitsu/pages/22.html
リンク 公式 ボーダーブレイクエアバースト オフィシャルサイト 言わずと知れた公式サイト。公式ブログのブレちゃんprpr wiki BORDER BREAK@wiki 分からない事があったら先ずはここで検索しる!情報の最先端 BORDER BREAK ネタ @ うぃき ネタwikiと侮るなかれ。各種兵装の戦闘の基礎など、役立つ情報も多い プレイサポート Border Break Manager チップにも対応したアセンシミュレータ。便利 試作型強度試験装置 チップ対応、SP回復速度など実数表記付きの万能シミュレータ。お気に入り。 BBコンパスもどき マップ確認からセンサー位置検討、榴弾の影響範囲など。画像保存も出来るのがGOOD
https://w.atwiki.jp/pagat/pages/24.html
legacy source code Unix tree OpenSolarisもある AT T UNIX System V Source Code カーネルソースツアー The traditional vi utf-8に対応 X.org archive X10からのソースツリー MS-DOS early source code MS-DOS v1.25 and v2.0 Source Code(github) The Unofficial CP/M Web site Plan9 copy(github) Panda TOPS-20 distribution Multics TerTermソースコード解説 OpenSolaris(archive) source The Heirloom project (github mirror) KornShell Motif TRON Forum T-kernelのソースコードを公開 binary only OS/2 Warp (VM image) Xenix 要確認 MacOS8 以下は捜索予定 MacPlus OpenVMS 開発中 linux / freebsd / illumios mozilla minix 過去バージョン mozilla portable
https://w.atwiki.jp/pokamethystandtopaz/pages/926.html
No.1~151 No.151~251 No.251~386 No.387~493 ブラック ホワイト 版 ポリゴン2 基本情報 名前 ポリゴン2 進化 前進化ポリゴンアップグレードを持たせ通信交換で進化|次進化ポリゴンZあやしいパッチを持たせ通信交換で進化 タイプ ノーマル とくせい トレースまたはダウンロード ぶんぷ DPt HS BW 種族値 HP 攻撃 防御 特攻 特防 素早 経験値 ポリゴン2 85 80 90 105 95 60 180 技 Lv 技 1 テクスチャー2,たいあたり,テクスチャー,まるくなる 7 サイケこうせん 12 こうそくいどう 18 じこさいせい 23 でんじふゆう 29 シグナルビーム 34 リサイクル 40 ほうでん 45 ロックオン 51 トライアタック 56 マジックコート 62 でんじほう 67 はかいこうせん 育成論 シングル 特性:トレース/ダウンロード 種族値 HP 攻撃 防御 特攻 特防 素早 ポリゴン2 85 80 90 105 95 60 ポリゴン2(輝石持ち) 85 80 145 105 153 60 初出の持ち物「進化の輝石」により、耐久性能が大幅に上昇 弱点をつけるのも格闘のみなので格闘持ちがいればいいが、いない場合は自己再生で積んでしまう可能性が高い ちなみに特性はATならダウンロード、耐久型ならトレースを推奨 ドラゴンメタ型 特性 トレース 個体値はA以外全てV(31)で計算しています SはこだわらないのであればVじゃなくてもいいです HP 攻撃 防御 特攻 特防 素早 努力値配分 244 0 108 108 44 4 (実数 191-124-139-130-81) 持ち物:しんかのきせき(最終進化前の場合、防御と特防が1.5倍) せいかく:おだやか 技 自己再生、冷凍ビーム、トライアタック、チャージビーム 対ドラゴン性能を重視して考えた型 耐久面 H244→H実数191となり、16n-1となる (毒々などの1/16ダメージの軽減) 物理耐久面 防御は意地っ張りA252オノノクスの逆鱗を確定で2回耐えれる つまりどの物理型ドラゴンに対しても結構耐えてくれる 特殊防御面 特防は臆病C252ラティオスの流星群を連続で最高乱数2連続以外2回耐え しかし珠持ちや控えめスカーフなどの場合は厳しいか 特攻面 H4ラティオスを冷凍ビームで確定2発 弱点をつけない場合や、相手が特防特化型の場合はチャージビームで突破力をつける 素早さは無振り同族意識で4振ってあります ポケモン ブラック ホワイト ハートゴールド ソウルシルバー プラチナ 図鑑 By ポケモン ブラック ホワイト 攻略wiki
https://w.atwiki.jp/color-cube/pages/122.html
ハメル次元:ベクトル空間の次元 多様体の次元 複体のホモロジー次元 クルル次元:環の次元 位相次元(トポロジカル次元): ・ユークリッド次元 ・アフィン次元 ・ルベーグ被覆次元 帰納次元: 大きな帰納的次元 小さな帰納的次元 フラクタル次元:フラクタル幾何の次元(0以上の実数であり、整数とは限らない) ・ハウスドルフ次元 ・レニー次元 ・ボックス次元 ・情報次元 ・相関次元 ・パッキング次元 ・相似次元 ・容量次元(ボックス次元,ボックスカウンティング次元) ・スペクトル次元 ・ランダムウォーク次元 ・ミンコフスキー次元
https://w.atwiki.jp/cmatome/pages/16.html
ニコニコ動画 http //www.nicovideo.jp/watch/sm8531180 for文 for文を使えば繰り返し処理ができる。次の配列を知るとfor文がもっと活躍できる。 ニコ動のプログラム using System; class Test6{ public static void Main(){ for(int i=0; i 10; i++){ //10回ループ Console.WriteLine("かっぱっぱ~"); } } } ちなみに、10回繰り返すだけなら for(int i=1; i =10; i++) とか for(int i=0; i =9; i++) でもできますが、前者のほうはiが1から始まるというのは次にやる配列との兼ね合いで推奨しません。 後者のi =9というのは(ここでは10回繰り返すのが)9回しか繰り返さないように見えてしまう可能性があり推奨しません。 forとifの組み合わせ) 動画のプログラム(少し改変しました。) using System; class Test6{ public static void Main(){ for(int i=0; i 10; i++){ //10回ループ if((i%2)==1){ //2で割ったあまりが1なら Console.WriteLine(i.ToString()+"は奇数です"); //ToStringをつけなくてもいいが、一応文字に変換するためのToString()つけます } else{ //2で割ってあまりが1でない、つまり0なら Console.WriteLine(i.ToString()+"は偶数です"); } } } } これはまぁ問題ないでしょう。 ここから高校数学の数列の内容が入ってきます。数列知らないひとや興味ない人は読み飛ばしてください 等差数列和はn(n+1)/2とかで簡単に求められますが、この場合forを使って練習するのでそれ禁止ね。 using System; class Test6{ public static void Main(){ int sum=0; for(int i=0; i 10; i++){ //10回ループ sum=sum+i; } Console.WriteLine("sum= "+sum.ToString(); } } 1+2+3+・・・+9を求めます 1+2+:::+9は漸化式をたてると S[n]=S[n-1]+n、S[0]=0。 一般に、A[n]=A[n-1]+nみたいに左にA[n]、右にA[n-1]とnだけ置いて A[n]とA[n-1]をSum,Sumの初期値をA[0],nをiとおいてそのまま書き換えればおk。 なぜそうすれば良いのかは面倒なので省略。数学とか好きな人は考えれ。 例: S[n]=2*S[n-1]+n/2,S[0]=0でS[5]を求めよ。 まず手動で求めてみましょう。S[1]=1/2、S[2]=2、S[3]=11/2、S[4]=13、S[5]=28.5 //S[n]とS[n-1]をS、n/2をi/2と置き換え double S=0; // n/2つまり小数が出てきてるのでint型ではなくdoubleを使う、S[0]=0なので初期値0 for(double d=1.0;d =5.0;d++){ //これも↓にi/2があるのでdouble、S[5]を求めるのでd =5.0。じゃないよ S=2*S+d/2; } Console.WriteLine(S.ToString()); 28.5って出てきました 実数型と整数型とキャスト ↑で、forループに使った変数をint型ではなくdouble型を使いました。 理由を説明します。 これを実行してみてください。 int i=3;double d; d=i/2; Console.WriteLine(d.ToString()); こたえいくつになるか?i=3でi/2なのでdは1.5になるはず。。。 ところが表示されたのは1でした。 i/2は両方整数型です。 したがって、i/2はそもそも整数です。[整数同士で割り算しても整数にしかなりません]。だからd=i/2とやってもdは1が入ってしまいました。 これを防ぐには d=(double)i/2; と。(double)をつけるか、i/2.0というように小数点をつけます。(小数をつけるのは整数型/実数型になり、あまり推奨しません。。。) これでi/2やi/2.0自体がdouble型だとみなされ、3/2は1.5になります。 こんな風に、(double)とかつけるのを型キャストとかいいます。 すべての型はできるだけ統一しておかないと、小数が整数になったり小数で計算してほしいのに整数扱いされて正しい数値が得られなくなってます。 悪い例 double d=3/2;Console.WriteLine(d.ToString()); 良い例 double d=3.0/2.0;またはd=(double)3/2; 次は1~15の掛け算 1*2*3*4*・・・*15 S[n]/S[n-1]=n⇒S[n]=S[n-1]*i、S[1]=1なのでS[n]とS[n-1]を適当な文字におきかえて double A=1;//めちゃくちゃでかい数なのでintでは収まらない、double型 for(double d=1;d =15;d++){ A=A*d; //Aは実数型なので、dも実数型にしました。 } Console.WriteLine(A.ToString()); 宿題の答えw 長々説明したけどべつにsum=sum+iとかはわからなくてもいいです。ここはアルゴリズムとか学ぶ場所じゃないんで。 while文 while(条件){ } 条件がtrueのときに処理を行い、ループする。満たしてないときに飛ばす。 動画の内容はやさしいので飛ばします。 break文 whileやfor文には、break;という文を加えることによって処理を強制的に抜け出せます。 例 while(true){ //処理 break; } たとえば、数値を入力してもらうときに 0という数値が入力されたら終了するときなどに使えます。 int Nyuuryoku; //Nyuuryokuになにか数を入れてもらう処理 while(true){ if(Nyuuryoku==0){ break; } //入力の処理 } do~while文なんてのもあります。 do{ }while(条件); 文の終了合図のセミコロンがついています!忘れないで do~whileは最低でも一回なにかやってほしいときに使います。 int x=1; while(x==2){ //処理 } ↑はwhileの間の処理は一度も実行されません。 int x=1 do{ //処理 }while(x==2); この処理は一度はかならず実行されます。
https://w.atwiki.jp/omoshiro2ch/pages/20.html
問題 85 名前:132人目の素数さん[sage] 投稿日:2005/07/01(金) 04 57 18 正の実数全体の集合をVとする。次の(i)(ii)(iii)を全て満たす集合A⊂V,B⊂Vは存在するか。 (i)A∩B=φ,A≠φ,B≠φ,A∪B=V (ii)x,y∈Aならばx+y∈A,xy∈A (iii)x,y∈Bならばx+y∈B,xy∈B …俺は答えは知らない。
https://w.atwiki.jp/leaguebattle/pages/248.html
バクフーン タイプ ほのお 特性 もうか 種族値 HP 攻撃 防御 特攻 特防 素早さ 78 84 78 109 85 100 簡単な説明 第2世代ジョウト御三家炎。 種族値は同じ御三家炎のリザードンとまったく一緒でタイプ一致のふんかは驚異的な威力を持つ。 物理面もレパートリーはあるがリザードンのように攻撃力上昇系の技を覚えないため、 決定力不足になりかねない問題もある。 かといって特殊技のレパートリーも乏しいのでふんか・きあいだまに頼りがちになってしまうところも弱点であり、 御三家内では癖のあるポケモンといえる。尚、HGSSではじんつうりきを遺伝できるようになった。 型考察 ふんか型(筆者 アヤメ) 性格 ひかえめ/おくびょう 努力値 HP6、特攻252、素早さ252 または 特攻252、素早さ実数134調整、残り耐久 持ち物 こだわりスカーフ/こだわりメガネ/いのちのたま 確定技 ふんか 選択技 かえんほうしゃorだいもんじorオーバーヒート/きあいだま/じんつうりき/めざめるパワー(電気or草or面)/ でんこうせっか/ 運用法 恐らくバクフーンでもっともメジャーな型、高めの特攻から最大火力のふんかは半減でも相手次第で半分位は 持っていけます。しかし、メジャーな分だけ読まれやすく小回りも利かないので他の拘り方と同じく相手の動きを 読んで行動する必要があり、それなりの技量が問われます。この型を運用するなら事前にステルスロックなどで タスキ潰しを行っておくと動かしやすくなります。 じんつうりきは潰せる範囲は広くなるものの特に誰かに有効、というわけでもないのでお好みで。 物理型(筆者 アヤメ) 性格 いじっぱり/ようき 努力値 HP6、攻撃252、素早さ252 または 攻撃252、素早さ実数134調整、残り耐久 持ち物 きあいのタスキ/いのちのたま/たつじんのおび/こだわりスカーフ/こだわりハチマキ 確定技 フレアドライブorほのおのパンチ 選択技 かみなりパンチ/じしん/きしかいせい/でんこうせっか/ 運用法 何の変哲もないただの物理型です。一応リザードンと同じ攻撃種族値なので出来ないことはなくマイナー気味な 型なので意表はつけます。ただ火力は持ち物で強化しないと中途半端感が漂うので注意してください。 相性の良い相方 水・岩・地面技のどれかを半減できるポケモンが相方として優秀と考えられます。 具体的には水/地面組のラグラージ、ヌオー、トリトドン、ナマズン辺りがいいでしょう。 特にラグラージはステルスロックを撒け、メジャーな型も物理寄りなことからベターだと思われます。
https://w.atwiki.jp/seko/pages/29.html
WristPDA Software/カテゴリ
https://w.atwiki.jp/othello/pages/28.html
プログラムなどを使って 一つ一つ辿って手の数(棋譜数)を数えていく。 当スレッドの主軸となる話題である。 棋譜のツリーを一手目からたどっていく探索とよばれる方法が主に使われる。 問題点はなんといっても時間である。 今のところ個人活動では、16手が最高である。 棋譜数の上界を下げるに貢献。 基本アルゴリズムの解説を一番下に載せました [New!] 最新データは→完全探索データ 姉妹話題→数式で表現 子話題 →枝刈り →Transposition →分散処理をしよう 63 名無しさん@3周年 05/01/22 20 52 17 3^(8*8)通りです 67 名無しさん@3周年 05/02/09 08 31 06 単純な状態空間なら 63より遥かに小さいのだが、 プランニングを考えるとなると打つ場所の履歴を保存しなきゃならんわけで、 その場合の数はめちゃくちゃに膨れ上がる。 オセロだと10^60通り程度、チェスだと10^120通り程度、 将棋だと10^220通り程度、囲碁だと10^360通り程度、 と、この手の研究をやってる人は言ってる。 ちなみに今のコンピュータではオセロでも完全解析は全然無理。 それでもオセロに関してはコンピュータは人間より遥かに強い。 チェスは、有名だと思うけど、 IBMがdeep blueっていうそれ専用のコンピュータを作ってようやくチャンピオンに勝った。 (但し、他の人には対応できないし、数回の対局の合間にプログラマが手を入れたりしていた。 短時間で完璧にアルゴリズムを弄る腕は素晴しいが・・・。) 将棋はやっとアマチュア5段に達するかどうかというところ。 囲碁は・・・だめぽ。 118 名無しさん@3周年 2005/05/13(金) 21 20 12 計算始めました。 死ぬまでに結果が出たらいいのだが。 119 名無しさん@3周年 2005/05/13(金) 23 55 29 118 まさかとは思うが全通り計算してるのか? 122 名無しさん@3周年 2005/05/14(土) 23 06 42 118 おまいが死ぬ前にパソコムが昇天するに3000ガバス 124 名無しさん@3周年 sage 2005/05/15(日) 06 49 03 67 オセロでも地球上の全ての物質を素粒子メモリーに変換したとしても間に合わんのね。 チェス以降だと宇宙の全素粒子を使用しても記録できない、と。 141 名無しさん@3周年 2005/06/29(水) 10 01 44 で、結局全局面は何通りあるの? 124 1局面100バイトとして、89,475,692,478,931,200バイト 1000で考えて89ペタ。 1テラ=1000円レベルでコスト的にも不可能じゃなくなる 148 名無しさん@3周年 2005/06/30(木) 13 05 25 ねえ何か思いついたから聞いて。プログラミングの素人ですが。。 まず、一局目から始まり、最後まで勝負つくまでの全通りはツリー状でイメージできるよね。 んで全通りの計算方法なんだけど まず適当に勝負つくまで局を進ませる。一局一局の手は記憶させておく。 んで次に最後の一手が他に無いか探す(特殊な場合以外最後は一通りだけど)。 最後の一手が他に無かったら、最後の一手の情報を消す。 最後の一手の情報を消すごとにカウントを一つ増やす。 一手戻り最後から二手目が他に手がないか探す。 あったら、局を進ませる。 以下つづける。。。 この方法だと今カウントしている属のみの手を記憶してればいいから容量がなくてもいいんじゃない? 149 名無しさん@3周年 sage 2005/06/30(木) 14 30 06 深さ優先探索だね。まぁ確かに容量は無くてもいけるかも知れんが、やってみ? 先に結論を言っておくと時間が足りない。4×4で実験してみてどれくらい時間がかかるか報告よろしく 150 名無しさん@3周年 sage 2005/06/30(木) 18 56 14 でもこれで容量の問題は解決するよね? かなり説明は省いたけど。 時間短縮は途中十局目ぐらいまで横ローラー探索をして、そのあとその結果をネットに載っける。 んで個々のPCがそれぞれの通りから縦探索をすればかなり時間短縮になるのでは? 151 名無しさん@3周年 2005/06/30(木) 20 00 09 これは面白くなってきたな。 呼びかけるか? 152 名無しさん@3周年 sage 2005/06/30(木) 20 52 45 へへーん。もしかして俺凄い?(・∀・) 世界的にもまだ算出されていないんでしょ? 数年掛かりでもヤる価値はあると思うよね。。 8ヶ月経過 260 256 2006/02/20(月) 07 59 34 プログラムを作って実際の数を調べてみた。 1・・・4 2・・・12 3・・・56 4・・・244 5・・・1396 6・・・8200 7・・・55092 8・・・390216 9・・・3005320 10・・・24571192 24571192*33*33*...*33*32*...*3*2*1=1.39e+70 急ごしらえなのであんまり速くないからとりあえず10手まで。 あと、まだバグがあるかも知れないから誰か検証お願い。 332 293 sage 2006/03/02(木) 17 58 43 全探索(11手まで)してみたら 260と微妙に違ってた。 [ 0] - 1( 0) [ 1] - 4( 0) [ 2] - 12( 0) [ 3] - 56( 0) [ 4] - 244( 0) [ 5] - 1396( 0) [ 6] - 8200( 0) [ 7] - 55092( 0) [ 8] - 390216( 0) [ 9] - 3005320(228) [10] - 24571192(356) [11] - 212260296(6384) 括弧内はゲーム終了数(内数)。9手目でのゲーム終了数分を足すと10手目も同じなんだけど… Wikiにある11手目のデータも9手目・10手目での終了分を足せば同じ結果に。 …私が悪いの? 333 293 sage 2006/03/02(木) 21 51 00 12手まで出したついでによんけたタンの分岐平均(どうやって出したの?)と比較してみた 手数平均分岐←の積実際の数誤差[%] 11440 2312120 34.664555561.785714286 44.36062392442.049180328 55.8582140013960.286532951 65.8361817082000.365853659 76.723554930550920.294053583 86.94363814113902162.256442586 97.5566288217030053204.097733353 107.900522770584245711927.328126368 118.376819074462821226029610.13645435 128.7781674356344193989224013.68817765 平均分岐数を単純に掛け合わせるのは危険っぽい。 334 293 sage 2006/03/02(木) 21 51 40 ごめん 333じゃ読めないね。Wikiに入れておく。 336 284 sage 2006/03/03(金) 08 02 23 12手の全検索、というか1/4検索です。 初手は1手固定にして、全棋譜数、パス、終了数は結果を4倍しています。 |手|最大手数| 全棋譜数 |パス |終了 | |-1|-------0|---------------4|-------0|-----0| |-2|-------3|--------------12|-------0|-----0| |-3|-------5|--------------56|-------8|-----0| |-4|-------6|-------------244|-------0|-----0| |-5|-------9|------------1396|-------0|-----0| |-6|------11|------------8200|-------0|-----0| |-7|------12|-----------55092|-------0|-----0| |-8|------14|----------390216|-------0|-----0| |-9|------15|---------3005320|------24|-----0| |10|------16|--------24571192|-----228|---228| |11|------18|-------212260296|-----932|---356| |12|------20|------1939892240|----7396|--6384| ゲーム終了の考え方は 332に近いですが 10手目が打てない場合に10手目の終了としています。 (332とは1手ずれる) 実は一晩かけて13手目までやったんですが結果がおかしいです。 変数は8バイト用意しておいたんですが、出力をミスったかもしれない。 |13|------21|------1249899332|---35588|-16384| 337 293 sage 2006/03/03(金) 09 10 51 ちょっと遅れたかな。一応こちらも13手探索終了 64bit整数を使ったつもりなので出力は大丈夫なはずです。 |手| 全棋譜数 |終了 | |-1|---------------4|-------0| |-2|--------------12|-------0| |-3|--------------56|-------8| |-4|-------------244|-------0| |-5|------------1396|-------0| |-6|------------8200|-------0| |-7|-----------55092|-------0| |-8|----------390216|-------0| |-9|---------3005320|-----228| |10|--------24571192|-----356| |11|-------212260296|----6384| |12|------1939892240|---16384| |13|-----18429768516|--299624| ゲーム終了の考え方は10手目を打った後に両者が置けなくなったら10手目の終了としています。 確かに変ですね。改良します。 338 284 sage 2006/03/03(金) 10 15 20 337 乙です。12手目まで一致してますので安心しました。 ゲーム終了の考え方は336と337(332初出)のどちらが良いでしょう? 私の場合(336)はプログラミングの都合だけだったので、他の皆さんの意見も聞きたいです。 333-335手数平均の積と実数の誤差ですが これは平均の算出誤差というより手法としての誤差でしょうね。 全検索で手数平均を算出しても同じくらいの誤差があるでしょう。 12手で14%の誤差で、手が進むにつれて誤差は大きくなるでしょうし 平均10手で20%の誤差があるとして0.8^(60/10)=0.26 60手目で99%(実数との割合が100倍違う)としても 10^51~10^56くらいではないでしょうか。(もう少し大きくなるかもしれないが) まあ、これくらいざっくりした数値でしかないのは確かですが、無意味な値ではないと思います。 339 284 sage 2006/03/03(金) 11 28 43 ごめん。 336の表の3手目のパスの値 8 は 0 が正解です。 (動作チェックルーチンの消し忘れ) 337も表はコピペみたいだから3手目の終了は0ですね。 すみませんでした。 340 293 sage 2006/03/03(金) 14 04 32 さらに進めて14手探索しました。 336と同じく1/4探索ですが。 |手|分|--全棋譜数--|--パス-|--終了-| |-1|-0|-----------4|------0|------0| |-2|-3|----------12|------0|------0| |-3|-5|----------56|------0|------0| |-4|-6|---------244|------0|------0| |-5|-9|--------1396|------0|------0| |-6|11|--------8200|------0|------0| |-7|12|-------55092|------0|------0| |-8|14|------390216|------0|------0| |-9|15|-----3005320|-----24|------0| |10|16|----24571192|------0|----228| |11|18|---212260296|----576|----356| |12|20|--1939892240|---1012|---6384| |13|21|-18429768516|--19204|--16384| |14|22|184042835408|--67536|-299624| 私は全探索は一旦この状態で手を引こうと思います。 時間がかかる(↑で200分弱)割になかなか前へ進めないので。 n手目のパス数と終了数はn-1手目を打った後の状態で パスをする必要がある局面数と終わった局面数です。 これらは全棋譜数には内数として含まれてますが パス数と終了数とは排他的に数えてます。 389 271 sage 2006/03/11(土) 22 04 53 388 お疲れです。うちのより10倍速いですねw さっき14手の結果が上がってきたのですが40時間かかってました。 計算しながら普通にパソコン使ってますが。 12手までは同じ速度だったのにねぇ 390 293 sage 2006/03/11(土) 22 56 58 フフフ、あの12手検索から微妙にプログラムを変更してるんですよ。 395 256 sage New! 2006/03/13(月) 17 30 26 全探索プログラムをC言語で書き直しました。 今15手やってます。 ぼくも13手までは確認しました。 idothello_v06.c 520 名無しさん@5周年 sage 2006/07/01(土) 17 58 36 2週間ほど前にこのスレ見つけて、面白そうだったので自分も全探索にチャレンジ。 自己満足な意味合いが強いけれど何とか高速化を行い、初手固定の14手目までの探索で 60分強と言うところまで来ました。 環境はWIN2k、XP1800+、VC2005Express。一応cygwin上のgccでもコンパイルできることを確認。 15手目までやってみたかったけど、家のマシンは負荷を掛け続けるとなぜか落ちるようなので 断念しました。 MMXやら64ビット専用やらと、まだ高速化はいろいろ出来そうですし、実際そういうソースも 公開されてるようですが、ソースレベルの高速化はとりあえず一旦ここでお終いにしようかと 思います。 次の手としては、同じ局面が発生した時の対処となりますでしょうか。 ちょっと試してみたいと思います。 523 名無しさん@5周年 sage 2006/07/12(水) 12 59 52 520 乙です。 >同じ局面が発生した時の対処 これが意外と難しいんだよね。 同じ局面を判断するためのデータベースが必要になるし回転や反転をどこまで考慮するかも悩み所。 このスレでも全探索は大勢チャレンジしてるけど、その次の一歩が踏み出せない感じだね。 524 520 sage 2006/07/21(金) 23 48 51 どもです。 あれからも細々とやっておりますが、難しいですね。 局面データの保持がやはり厳しいです。 検索速度は無視してでも、何とかできないかと考えております。 高速化の方は成果がありまして、初手固定14手まで50分弱となりました。 今のところそんな感じです。 525 523 sage 2006/07/28(金) 08 01 55 524 14手まで50分弱とはかなり速いですね。このスレでもトップクラスじゃないかな? 私は13手で数時間掛かってそこで挫折ですorz 局面データを保持するためのメモリ量を考えてみました。 64枡のそれぞれに黒の有無、白の有無、と考えると、1盤面あたりに128ビット=16バイトのデータ量が必要。 64枡に空き、黒、白の3値を保持して最小完全ハッシュ関数を作ったとして、3^64通り=13バイト。 ここで考えたのがx手目が決まれば盤上の駒数nはn=x+4個に決まるのでこれを使えないだろうか。 64枡にn個の石を配置出来るパターンは64!/(64-n)!/n! n個の石が黒か白かは2^n これらを最小完全ハッシュ関数で表現出来れば n=10の時配置は5バイト、黒白情報は2バイト。計7バイト n=15の時配置は6バイト、黒白情報は2バイト。計8バイト これを使えば初期十数手まではメモリ節約出来ると思う。 ただしハッシュ関数、逆ハッシュ関数を使うので速度的にはかなり不利だと思う。 それと上手い最小完全ハッシュ関数と逆関数が作れるか、というのも問題ですね。 526 名無しさん@5周年 sage 2006/08/12(土) 23 18 58 525 コンパイラの吐くソースを見ながら、ビット演算と場合分けをちまちまとやった成果です。 局面データについてですが、配置情報と黒白情報が分かれてるのが良いですね。 片方(この場合は黒白情報か?)をくくり出すというか、indexにすれば実際の保持量を減らすことが 出来ますし。自分の場合は算術圧縮の頻度表(石の数)で試してみました。 とはいえ結局のところ局面数そのものが多いため、1局面を1ビットとしても持ち切れなくなると 思われるので、重複チェックは適当な所で妥協した方が良い気がしてきました。 つまり、一定数を超えたら適当にデータを捨てていくのはどうだろうかと。 探索数と保持数で上手くバランスが取れて成果が出るか、どっちつかずで意味が無かった という結果になるか分かりませんけど。 しかしいずれにしろ局面を少ないデータで表現できるに越したことは無いので、何とかならないかと 引き続き思案中であります。 次に試そうと思っているのが、外周の空きマスをランレングスで圧縮してから算術圧縮というものです。 529 名無しさん@5周年 sage 2006/09/02(土) 23 25 54 ネタとしてwikiの方にソース(othello_count.cpp)をアップさせてもらいました。 高速化の理由がバグのせいだったと言うこともあるかもしれませんので、 検証や更なる高速化をどなたかお願い致します。 (バグ入りじゃないと良いナァ…) othello_count.cpp 532 256 2006/09/09(土) 04 49 56 みなさんお久しぶりです。 520氏のプログラムのソースをいじってみました。 最終1手を最適化しただけですが、僕のマシン上(CeleronD3.06GHz)で、 処理時間を59%くらい削減できました。(12手:27.44秒- 11.28秒) 僕がちらっと見た限りでは520氏オリジナル版にバグは見当たりませんでしたが、 ぼくの変更により新しくバグが入ってしまったかもしれません。 ぼくはC++があんまりわかってませんし。 ソースは 531と同じ場所にアップしときました。(othello_counter2.cpp) こういう事ができる余地を残しておきながらあれだけ速いのは驚きました。 othello_counter2.cpp 533 名無しさん@5周年 sage 2006/09/10(日) 21 42 46 以前挑戦した時は13手で数時間かかっていたのですが、 久しぶりに書き直して、ちまちま改良を重ねたら13手で70分程というところまできました。 532のと比べると、まだまだ大きな差がありますが、もう少し頑張ってみようと思います。 534 293 sage 2006/09/11(月) 01 35 22 スレ復活の兆しが見えてきたので活力剤を投入してみます。 ご存じの方もいらっしゃるでしょうが、とある行きつけのスレでここ向きな話題を見つけたので 纏めておきました 520氏のプログラムに近い感じの流れだと思いますがどうでしょう? ちなみに後半の回転に関しては、ユニークな盤面数を出すときに必要だろうということで。 関連スレ 542 名無しさん@5周年 sage 2006/10/27(金) 20 34 42 自分独自のやり方では限界が見えてたので 534を参考にしたら 11手12秒まで到達 基本アルゴリズムの解説 よく使われる othello_counter{3,4}.cpp の大雑把な解説です。 static uint32 mobility[MAX_TURN];// 打てる可能性のある最大数 static uint64 record[MAX_TURN];// 棋譜数 static uint64 gameover[MAX_TURN];// ゲーム終了 static uint64 passcount[MAX_TURN];// パス数 main(){ ... //初期化 int tmax = 引数で与えられた手数制限; uint64 black = 0x0000000818080000ULL;//初手固定 uint64 white = 0x0000001000000000ULL;//初手固定 mobility[tmax-1] = 4;//初手固定 record[tmax-1] = 1; //初手固定 gameover[tmax-1] = 0; passcount[tmax-1] = 0; //探索開始 SearchMove(white, black, tmax-2); //結果表示 for(i){ printf(mobility[i]); printf(record[i]*4); //初手固定による対称性により4倍 printf(passcount[i]*4);//初手固定による対称性により4倍 printf(gameover[i]*4); //初手固定による対称性により4倍 } } /* own = 次に着手する色の bitboard opp = 次に着手しない色の bitboard turn = この手を含む深化残数。1 だとさらなる SearchMove 呼び出しなし */ SearchMove(board own, board opp, int turn){ board move = 着手可能手; if(!move.f){ //打つ手がない→パス own と opp の swap; board move = 着手可能手; if(!move.f){ //打つ手がない→相手もパス ++gameover[turn];//終了数カウント } ++passcount[turn];//パスカウント } --turn; if(turn 0){ uint32 mobcnt = 0; //着手可能数カウントリセット while(move){ board x = move の中から 1 ビット選んで新たに置く石とする; board reverse = x を打ったときに裏返る石; board nextopp = opp.f ^ reverse.f; //裏返りを反映 board nextown = own.f ^ reverse.f; //裏返りを反映(これって要らないような…) nextown.l |= x; //新たに置く石を反映 if(turn 0){ SearchMove(nextopp, nextown, turn); }else{ //othello_counter4.cpp では対称性のある盤面数の計算のために最終盤面でこれを呼ぶみたい LastMove(nextopp, nextown, turn); } ++mobcnt; //着手可能数インクリメント } record[turn+1] += mobcnt; //着手可能数記録 if(mobility[turn+1] mobcnt) mobility[turn+1] = mobcnt; //着手可能数の最大を更新 } }
https://w.atwiki.jp/newclang/pages/22.html
型 基本データ型 整数、実数 整数 octed オクテットは必ず8ビットである。 byte 1 [octet]のみ、文字だって数値だし、文字型いらね integer CPUが自然に扱える範囲で 8bit 16bit 32bit 64bit 128bit int8 int16 int32 int64 int128 byte short int long long long byte byte2 byte4 byte8 byte16 octet octet2 octet4 octet8 octet16 oct oct2 oct4 oct8 oct16 正数 8bit 16bit 32bit 64bit 128bit ubyte ushort uint ulong ulong long uint8 uint16 uint32 uint64 uint128 u8 u16 u32 u64 u128 ubyte ubyte2 ubyte4 ubyte8 ubyte32 uoctet uoctet2 uoctet4 uoctet8 uoctet16 uoct uoct2 uoct4 uoct8 uoct16 実数 floating 浮動小数点数、IEEEのでもなんでもかまわん fixed 固定小数点数、誰得 浮動小数点型 1byte 2byte 4byte 8byte 16byte float double shotr real real 虚数 complex 複合データ型 配列、多次元配列、構造体(のようなもの)、列挙、参照、メモリ参照(つまりポインタ) 配列 type[n] array 多次元配列 type[n,m,...] array 構造体、列挙 Cのがいいよ struct 参照 関数の引数にのみ使える、いわゆる本当のcall by referenceを実現するため また、メモリ参照を増やさないため alias unsigned integer uint_t; ret-type func(ref type[,] array, uint_t row, uint_t column);または ret-type func(type[,] array, uint_t row, uint_t column); メモリ参照 type@ memref integer@ memref = new integer[n]; integer int, @ memref_int = ∫ @memref_int = 128; integer[n] array, [n,m] marray memcpy( marray[x,0], array, n); marray[x,0] != @(marray+x)+0, array[0] == array メモリをうまく抽象化できればいいんだけど 文字列 文字列型は動的メモリ管理と直結だから Cには入ってないんよね 実行系が必須だと困る用途もあるし 0終端文字列 文字列構造体 可変長配列 結局型のサイズって重要だから stdint風でいんじゃない?